import axios from "axios";
import ViewUIPlus from 'view-ui-plus'//组件库

var instance = axios.create({

});
instance.defaults.timeout =  1000 * 60 * 60;



///////////////取消重复 发起的 上一个接口///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
let pendingMap = new Map();
// let pendingMap = new Map<string, Canceler>();

const addPending = (config) => {
    removePending(config);
    const url = getPendingUrl(config);
    config.cancelToken = new axios.CancelToken(cancel => {
        pendingMap.set(url, cancel);
    });
}

const removePending = (config) => {
    const url = getPendingUrl(config);
    if (pendingMap.has(url)) {
        const cancel = pendingMap.get(url);
        cancel && cancel();
        pendingMap.delete(url);
    }
}

// 根据实际需求选择合适的getPendingUrl实现
const getPendingUrl = (config) => config.url; // 或 [config.method, config.url].join('&');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 添加请求拦截器
instance.interceptors.request.use(config=>{
         if (!!sessionStorage.getItem('loginData')) {  // 判断是否存在token，如果存在的话，则每个http header都加上token
            // console.log("在发送请求之前做些什么")
            let loginData = sessionStorage.getItem('loginData');
            if (!!loginData) {
                let data = JSON.parse(loginData).token;
                config.headers.Authorization = data;
            }
        }

        addPending(config);//取消重复 发起的 上一个接口
        return config;
    },
    error=>{
        console.log(error)
        return Promise.reject(error)
    }
)



// 添加响应拦截器
instance.interceptors.response.use(response=> {
        // cbsSignalPlatform/dvs/splitDrawing/drawingDownload

        let axiosUrl = response.config.url;

        //web展示cad文件
        let filterInterface = ["cbsSignalPlatform/dvs/splitDrawing/drawingDownload"];

        // 检查URL是否在白名单内
        let isUrlInFilterList = filterInterface.some(url => axiosUrl.includes(url));

        if(isUrlInFilterList){//过滤不需要拦截的接口
            console.log('存在',response)
            return response.data;
        }else{
            if (response.data.status == 200 || response.data.status == 0){
                return response.data;
            }else if (response.data.status == 400 || response.data.status == 401){
                ViewUIPlus.Spin.hide();
                ViewUIPlus.Message.error({
                    content: response.data.message,
                    onClose: function () {
                        sessionStorage.clear();// 删除所有数据
                        location.reload()

                    }
                });

            }else{
                ViewUIPlus.Spin.hide();
                ViewUIPlus.Message.error({
                    content: response.data.message,
                    duration: 5
                });
            }
        }

        // 对响应数据做点什么
        // return Promise.resolve(response.data)
    },
    error=> {
        console.log(error)
        if(error.response.status === 404){
            ViewUIPlus.Spin.hide();
            ViewUIPlus.Message.error({
                content: '请求接口不存在，请联系管理员。',
                duration: 5
            });
        }else if (error.response.status === 500) {
            ViewUIPlus.Spin.hide();
            ViewUIPlus.Message.error({
                content: '系统出现未知异常，请联系管理员。',
                duration: 5
            });
        } else if (error.response.status === 400) {
            ViewUIPlus.Spin.hide();
            ViewUIPlus.Message.error({
                content: '身份信息已失效,请重新登录。',
                onClose: function () {
                    sessionStorage.clear();// 删除所有数据
                    location.reload()
                }
            });
        } else {
            ViewUIPlus.Spin.hide();
            ViewUIPlus.Message.error({
                content: error.response.data.msg,
                duration: 5
            });
        }

    }
);



export default instance;
